hvm: Merge MSR_EFER handling.
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 13 Sep 2010 16:35:03 +0000 (17:35 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 13 Sep 2010 16:35:03 +0000 (17:35 +0100)
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
xen/arch/x86/hvm/hvm.c
xen/arch/x86/hvm/svm/svm.c
xen/arch/x86/hvm/vmx/vmx.c

index 486178e927273649edd9468b897d5c4b23a5fbea..7cca08a6e98640cfcbaf7e9e7ed107c137a4e823 100644 (file)
@@ -2039,6 +2039,10 @@ int hvm_msr_read_intercept(unsigned int msr, uint64_t *msr_content)
 
     switch ( msr )
     {
+    case MSR_EFER:
+        *msr_content = v->arch.hvm_vcpu.guest_efer;
+        break;
+
     case MSR_IA32_TSC:
         *msr_content = hvm_get_guest_tsc(v);
         break;
@@ -2138,6 +2142,11 @@ int hvm_msr_write_intercept(unsigned int msr, uint64_t msr_content)
 
     switch ( msr )
     {
+    case MSR_EFER:
+        if ( hvm_set_efer(msr_content) )
+           return X86EMUL_EXCEPTION;
+        break;
+
     case MSR_IA32_TSC:
         hvm_set_guest_tsc(v, msr_content);
         break;
index 7651012c406d7a1aa6fddf60c5730fc8ff38c0c6..93171b748264aebe8b998b06199eaf1a993815e3 100644 (file)
@@ -116,11 +116,6 @@ long_mode_do_msr_write(unsigned int msr, uint64_t msr_content)
 
     switch ( msr )
     {
-    case MSR_EFER:
-        if ( hvm_set_efer(msr_content) )
-            return HNDL_exception_raised;
-        break;
-
     case MSR_IA32_MC4_MISC: /* Threshold register */
     case MSR_F10_MC4_MISC1 ... MSR_F10_MC4_MISC3:
         /*
@@ -1042,10 +1037,6 @@ static int svm_msr_read_intercept(unsigned int msr, uint64_t *msr_content)
 
     switch ( msr )
     {
-    case MSR_EFER:
-        *msr_content = v->arch.hvm_vcpu.guest_efer;
-        break;
-
     case MSR_IA32_SYSENTER_CS:
         *msr_content = v->arch.hvm_svm.guest_sysenter_cs;
         break;
index 5bf5e15a2999805c2ac3958863f7644253466b54..8475e8f949644fd7cf102db1ddaa3b383f476c90 100644 (file)
@@ -172,10 +172,6 @@ long_mode_do_msr_read(unsigned int msr, uint64_t *msr_content)
 
     switch ( msr )
     {
-    case MSR_EFER:
-        *msr_content = v->arch.hvm_vcpu.guest_efer;
-        break;
-
     case MSR_FS_BASE:
         *msr_content = __vmread(GUEST_FS_BASE);
         break;
@@ -224,11 +220,6 @@ long_mode_do_msr_write(unsigned int msr, uint64_t msr_content)
 
     switch ( msr )
     {
-    case MSR_EFER:
-        if ( hvm_set_efer(msr_content) )
-            goto exception_raised;
-        break;
-
     case MSR_FS_BASE:
     case MSR_GS_BASE:
     case MSR_SHADOW_GS_BASE:
@@ -270,7 +261,6 @@ long_mode_do_msr_write(unsigned int msr, uint64_t msr_content)
  uncanonical_address:
     HVM_DBG_LOG(DBG_LEVEL_0, "Not cano address of msr write %x", msr);
     vmx_inject_hw_exception(TRAP_gp_fault, 0);
- exception_raised:
     return HNDL_exception_raised;
 }
 
@@ -351,36 +341,13 @@ void vmx_save_host_msrs(void) {}
 static enum handler_return
 long_mode_do_msr_read(unsigned int msr, uint64_t *msr_content)
 {
-    struct vcpu *v = current;
-
-    switch ( msr )
-    {
-    case MSR_EFER:
-        *msr_content = v->arch.hvm_vcpu.guest_efer;
-        break;
-
-    default:
-        return HNDL_unhandled;
-    }
-
-    return HNDL_done;
+    return HNDL_unhandled;
 }
 
 static enum handler_return
 long_mode_do_msr_write(unsigned int msr, uint64_t msr_content)
 {
-    switch ( msr )
-    {
-    case MSR_EFER:
-        if ( hvm_set_efer(msr_content) )
-            return HNDL_exception_raised;
-        break;
-
-    default:
-        return HNDL_unhandled;
-    }
-
-    return HNDL_done;
+    return HNDL_unhandled;
 }
 
 #endif /* __i386__ */